var config = require('./webpack.config.base');
var path = require('path');
var rootPath = path.join(__dirname, './');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const ParallelUglifyPlugin = require("webpack-parallel-uglify-plugin");
var CopyWebpackPlugin = require('copy-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
//打包分析
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; 
config.mode = 'production';
config.plugins.push(
    new CleanWebpackPlugin(),
    // 使用 ParallelUglifyPlugin 并行压缩输出JS代码   dev不需要压缩，好打包时间
  new ParallelUglifyPlugin({
    // 传递给 UglifyJS的参数如下：
    uglifyJS: {
      output: {
        beautify: false,//是否输出可读性较强的代码，即会保留空格和制表符，默认为输出，为了达到更好的压缩效果， 可以设置为false
        comments: false,//是否保留代码中的注释，默认为保留，为了达到更好的压缩效果，可以设置为false
      },
      compress: {
        // warnings: false,// 是否在UglifyJS删除没有用到的代码时输出警告信息，默认为输出，可以设置为false关闭这些作用 不大的警告
        drop_console: false,//是否删除代码中所有的console语句，默认为不删除，开启后，会删除所有的console语句
        collapse_vars: true,//是否内嵌虽然已经定义了，但是只用到一次的变量，比如将 var x = 1; y = x, 转换成 y = 5, 默认为不 转换，为了达到更好的压缩效果，可以设置为false
        reduce_vars: true//是否提取出现了多次但是没有定义成变量去引用的静态值，比如将 x = 'xxx'; y = 'xxx'  转换成var a = 'xxxx'; x = a; y = a; 默认为不转换，为了达到更好的压缩效果，可以设置为false
      }
    }
  }),
    new CopyWebpackPlugin([ // 复制高度静态资源
        {
          from: path.join(rootPath, 'static'),
          to: path.join(rootPath, 'dist/static')
        }
    ]),
    new MiniCssExtractPlugin(),//TODO
    new HtmlWebpackPlugin({//也可以实现引入js压缩  TODO  在dist文件夹下生成一个新的index.html文件  ps：本地没有生成要写死
        filename: '../index.html',//生成dist文件下输出文件的名称
        template: 'src/index.html',
        chunkSortMode: 'none',
        minify:{
          collapseWhitespace:true,//移除空行
          removeComments:true,//移除注释
          minifyJS: true, // 压缩html里的js（使用uglify-js进行的压缩）
          minifyCSS: true, // 压缩html里的css（使用clean-css进行的压缩）
        }
    }),
    new MiniCssExtractPlugin({ //对单独生成的css重命名
      filename: '[name].[contenthash:6].css',
    }),
);

//cnpm run dev 用的
if (process.env.NODE_ENV === 'development') {
    config.plugins.push(
      new BundleAnalyzerPlugin(),
    )
  }

module.exports = config;
